package com.telcordia.cvas.rpn;


public class RpnCalculator {
	private OperandStack values = new OperandStack();

	public int getXRegister() {
		return values.peek();
	}

	public void setXRegister(int value) {
		values.replaceTop(value);
	}

	public void enter() {
		values.push(getXRegister());
	}

	public void add() {
		int rhs = values.pop();
		int lhs = values.pop();
		int result = lhs + rhs;
		setXRegister(result);
	}

	public void subtract() {
		int rhs = values.pop();
		int lhs = values.pop();
		int result = lhs - rhs;
		setXRegister(result);
	}

	public void factorial() {
		int result = 1;
		
		int operand = values.pop();
		
		while(operand > 0)
			result *= operand--;
		
		setXRegister(result);
		setXRegister(1);
	}

}
